#include "qtableview_common.h"
#include <qdebug>
#include <QSqlTableModel>
QTableView_common::QTableView_common()
{

}
QTableView_common::QTableView_common(QWidget *parent)
    :QTableView(parent)//子类必须显式调用父类有参构造，否则父类的有参构造无法被调用
{

    this->setSelectionMode(QAbstractItemView::SingleSelection);//只允许单选
    this->setSelectionBehavior(QAbstractItemView::SelectRows);//按行选择
    //this->resizeColumnsToContents();//列宽适应内容，绑定model之后才能生效
    //this->setSortingEnabled(true);//排序使能，并立即执行一次排序
    //this->horizontalHeader()->sortIndicatorOrder();//水平头显示排序按钮
    //this->verticalHeader()->setSectionsMovable(true);//按住行号可拖动
    //this->hideColumn(0);//隐藏主键列,此时尚未绑定model，无法生效

    Act_DelRow = new QAction(tr("删除该行"), this);
    Act_InsertRow = new QAction(tr("插入新行(上方)"), this);

    menu=new QMenu(this);
    menu->addAction(Act_DelRow); //添加菜单项Act_DelRow
    menu->addAction(Act_InsertRow); //添加菜单项Act_InsertRow

    QObject::connect(this->Act_DelRow,SIGNAL(triggered()),
                     this,SLOT(on_Act_DelRow_triggered()));//右键菜单的动作
    QObject::connect(this->Act_InsertRow,SIGNAL(triggered()),
                     this,SLOT(on_Act_InsertRow_triggered()));//右键菜单的动作

}
void QTableView_common::contextMenuEvent(QContextMenuEvent *e)
{
    menu->exec( e->globalPos() );//在光标位置处弹出菜单
}

void QTableView_common::on_Act_InsertRow_triggered()
{
    QAbstractItemModel *model= this->model();//用父类指针接管与本view绑定的model
    int currentRow=this->currentIndex().row();

    model->insertRow(currentRow); //在选中行的前面添加一行
    model->setData(model->index(currentRow,1),"");//至少要在非主键列写入一次，否则submit会失败
    model->submit();
}


void QTableView_common::on_Act_DelRow_triggered()
{
    QAbstractItemModel *model= this->model();//用父类指针接管与本view绑定的model
    int currentRow=this->currentIndex().row();

    qDebug()<<"选中的行号："<<currentRow;
    qDebug()<<"删除操作的结果是："<<model->removeRow(currentRow);
    qDebug()<<"提交删除的结果是："<<model->submit();//提交修改

    if(  NULL != dynamic_cast<QSqlTableModel*>(model)  )//判断model的类型是不是QSqlTableModel
    {//RTTI机制
        qDebug()<<"类型提升成功";
        QSqlTableModel *sql_model = dynamic_cast<QSqlTableModel*>(model);
        sql_model->setFilter("");//过滤显示是QSqlTableModel类独有的，父类QAbstractItemModel没有
    }
}


